package day10.RandomAccessFileTest;

import java.io.File;
import java.io.RandomAccessFile;
import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        // 文件加密、解密
        // 10001100 10111001 10011101 00110111
        // 用一个值，对每一个字节求异或
        System.out.println("输入文件");
        String filename = new Scanner(System.in).nextLine();
        File file = new File(filename);
        if(!file.isFile()){
            System.out.println("不是文件");
            return;
        }
        System.out.println("KEY:");
        int key = new Scanner(System.in).nextInt();
        try {
            encrypt(file, key);
            System.out.println("完成");
        } catch (Exception e) {
            System.out.println("失败");
            e.printStackTrace();
        }
    }

    private static void encrypt(File file, int key) throws Exception{
        /*
        从文件中读取一个字节值
        对key异或后，再写回到文件
         */
        RandomAccessFile raf = new RandomAccessFile(file, "rw");
//        int b;
//        while((b = f.read()) != -1){
//            b ^= key;
//            f.seek(f.getFilePointer() - 1);
//            f.write(b);
//        }
//        f.close();
        // 一般用8k
        byte[] buff = new byte[8192];
        int n;
        while((n = raf.read(buff)) != -1){
            for(int i = 0; i < n; i++){
                buff[i] ^= key;
            }
            // 位置前移n个位置
            raf.seek(raf.getFilePointer() - n);
            //数组中前n个字节，一批写回文件
            raf.write(buff,0,n);
        }
        raf.close();
    }
}
